package com.oodso.say.utils;

import android.content.Context;
import android.os.IBinder;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

import java.text.DecimalFormat;

/**
 * Created by admin on 2016/11/23.
 */

public class EditTextUtil {
    public static boolean CheckNull(EditText editText) {
        if (editText == null || editText.equals("")) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 价钱保留两位小数
     *
     * @param v
     * @return
     */
    public static String round(Double v) {
        //保留两位小数
        DecimalFormat format = new DecimalFormat("0.00");
        return format.format(v);

    }

    public static String replaceSubString(String str, int star, int end) {
        String sub = "";
        try {
            String sub1 = str.substring(0, star);
            String sub2 = str.substring(end, str.length());
            StringBuffer sb = new StringBuffer();
            if (star < end) {
                for (int i = star; i < end; i++) {
                    sb.append("*");
                }
                sub = sub1 + sb.toString() + sub2;
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return sub;
    }

    public static void integerShow(CharSequence s, EditText et) {
        //如果输入第一个数字是0，则去除0
        if (s.toString().startsWith("0")
                && s.toString().trim().length() > 1) {
            if (!s.toString().substring(1, 2).equals(".")) {
                et.setText(s.subSequence(1, s.toString().trim().length()));
                et.setSelection(1);
                return;
            }
        }
        String text = s.toString();
        et.setSelection(s.length());
        if (text != null && !EmptyUtils.isEmpty(text) && Integer.parseInt(text.toString().trim()) > 9999999) {
            et.setText("9999999");
        }
    }

    public static void moneyShow(CharSequence s, EditText edit, String toast) {
        //小数点后保留两位
        if (s.toString().contains(".")) {
            if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                s = s.toString().subSequence(0,
                        s.toString().indexOf(".") + 3);
                edit.setText(s);
                edit.setSelection(s.length());
                ToastUtils.showToastOnly("小数点后只能保留两位");
            }
        }
        //第一个字符是点，则在点前加一个0
        if (s.toString().trim().substring(0).equals(".")) {
            s = "0" + s;
            edit.setText(s);
            edit.setSelection(2);
        }
        //如果输入第一个数字是0，则去除0
        if (s.toString().startsWith("0")
                && s.toString().trim().length() > 1) {
            if (!s.toString().substring(1, 2).equals(".")) {
                edit.setText(s.subSequence(1, s.toString().trim().length()));
                edit.setSelection(1);
                return;
            }
        }

        String text = s.toString();
        edit.setSelection(text.length());
        if (!EmptyUtils.isEmpty(text)) {
            if (Double.parseDouble(text.toString().trim()) > 99999999.99) {
                ToastUtils.showToastOnly(toast);
                edit.setText("99999999.99");
            }
        }
    }

    /**
     * EditText竖直方向是否可以滚动
     *
     * @param editText 需要判断的EditText
     * @return true：可以滚动  false：不可以滚动
     */
    public static boolean canVerticalScroll(EditText editText) {
        //滚动的距离
        int scrollY = editText.getScrollY();
        //控件内容的总高度
        int scrollRange = editText.getLayout().getHeight();
        //控件实际显示的高度
        int scrollExtent = editText.getHeight() - editText.getCompoundPaddingTop() - editText.getCompoundPaddingBottom();
        //控件内容总高度与实际显示高度的差值
        int scrollDifference = scrollRange - scrollExtent;

        if (scrollDifference == 0) {
            return false;
        }

        return (scrollY > 0) || (scrollY < scrollDifference - 1);
    }

    /**
     * 根据EditText所在坐标和用户点击的坐标相对比，来判断是否隐藏键盘，因为当用户点击EditText时则不能隐藏
     *
     * @param v
     * @param event
     * @return
     */
    public static boolean isShouldHideKeyboard(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] l = {0, 0};
            v.getLocationInWindow(l);
            int left = l[0],
                    top = l[1],
                    bottom = top + v.getHeight(),
                    right = left + v.getWidth();
            if (event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom) {
                // 点击EditText的事件，忽略它。
                return false;
            } else {
                return true;
            }

        }
        // 如果焦点不是EditText则忽略，这个发生在视图刚绘制完，第一个焦点不在EditText上，和用户用轨迹球选择其他的焦点
        return false;
    }

    /**
     * 获取InputMethodManager，隐藏软键盘
     *
     * @param token
     */
    public static void hideKeyboard(Context context, IBinder token) {
        if (token != null) {
            InputMethodManager im = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
            im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }

    /**
     * 显示键盘
     * @param editText
     */
    public static void showKeyBoard(EditText editText) {
        InputMethodManager inputManager =
                (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.showSoftInput(editText, 0);
    }

    /*由于Java是基于Unicode编码的，因此，一个汉字的长度为1，而不是2。
         * 但有时需要以字节单位获得字符串的长度。例如，“123abc长城”按字节长度计算是10，而按Unicode计算长度是8。
         * 为了获得10，需要从头扫描根据字符的Ascii来获得具体的长度。如果是标准的字符，Ascii的范围是0至255，如果是汉字或其他全角字符，Ascii会大于255。
         * 因此，可以编写如下的方法来获得以字节为单位的字符串长度。*/
    public static int getWordCount(String s)
    {
        int length = 0;
        for(int i = 0; i < s.length(); i++)
        {
            int ascii = Character.codePointAt(s, i);
            if(ascii >= 0 && ascii <=255)
                length++;
            else
                length += 2;

        }
        return length;

    }

//    /**
//     * 禁止输入特殊字符及空格换行
//     * @param editText
//     */
//    public static void setFilter(EditText editText){
//        InputFilter inputFilter = new InputFilter() {
//            @Override
//            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
//
//                if(source.equals(" "))
//                    return "";
//                if(EmojiFilter.filterEmoji())
//                return null;
//            }
//        };
//    }
}
